﻿using System;
using System.Linq;
using System.Collections.Generic;
using AccesoADatos;
using Entidades;

namespace LogicaDeNegocios
{
	public class Habilidades
	{
		#region Campos

		AuxiliarHabilidad Auxiliar;

		#endregion

		#region Constructor

		public Habilidades()
		{
			Auxiliar = new AuxiliarHabilidad();
		}

		#endregion

		#region Métodos

		#region Agregar Habilidad

		public bool Agregar(Habilidad nuevaHabilidad)
		{
			bool resultado = false;
			try
			{
				Habilidad habilidadAgregada = Auxiliar.Agregar(nuevaHabilidad);

				if (habilidadAgregada != null)
				{
					resultado = true;
				}
			}
			catch (Exception ex)
			{
				throw (ex);
			}
			return resultado;
		}

		#endregion

		#region Modificar Habilidad

		public bool Modificar(Habilidad habilidadAModificar)
		{
			bool resultado = false;
			try
			{
				Auxiliar.Modificar(habilidadAModificar);
				resultado = true;
			}
			catch (Exception ex)
			{
				throw (ex);
			}
			return resultado;
		}
		#endregion

		#region Eliminar Habilidad

		public bool Eliminar(Habilidad habilidadAEliminar)
		{
			bool resultado = false;
			try
			{
				Auxiliar.Eliminar(habilidadAEliminar);
				resultado = true;
			}
			catch (Exception ex)
			{
				throw (ex);
			}
			return resultado;
		}

		#endregion		

        #region Obtener Habilidades

        public List<Habilidad> ObtenerHabilidades(string examenClave = "", short id = 0)
		{
			List<Habilidad> resultado = null;

			try
			{
				resultado = Auxiliar.Listar(examenClave, id);
			}
			catch (Exception ex)
			{
				throw (ex);
			}
			return resultado;
		}

		#endregion

        #region Obtener Habilidad

        public Habilidad ObtenerHabilidad(string examenClave, short id)
        {
            return ObtenerHabilidades(examenClave, id).FirstOrDefault();
        }

        #endregion        

        #region Obtener ID Habiliad Aleatoria

        public short ObtenerIdHabilidadAleatoria(string claveExamen, string codigoExamen, DateTime fechaHoraInicio)
        {            
            var listaHabilidades = ObtenerHabilidades(claveExamen);

            var listaIdHabilidades = listaHabilidades.Select(h => h.Id);

            short idHabilidadSelecccionada;

            bool condicion;

            do
            {
                int indiceAleatorio = new Random().Next(listaIdHabilidades.Count());
                var numeroPreguntasHabilidad = listaHabilidades.ElementAt(indiceAleatorio).Numero;
                idHabilidadSelecccionada = listaHabilidades.ElementAt(indiceAleatorio).Id;

                LogicaDeNegocios.ExamenesPreguntas ep = new LogicaDeNegocios.ExamenesPreguntas();
                var listaPreguntaExamenHabilidad = ep.Listar(codigoExamen, claveExamen, listaHabilidades.ElementAt(indiceAleatorio).Id);

                var numeroPreguntasHabilidadEnviadas = listaPreguntaExamenHabilidad.Where(pe => pe.FechaHoraInicio > fechaHoraInicio).Count();

                condicion = numeroPreguntasHabilidadEnviadas < numeroPreguntasHabilidad;

            } while (!condicion);

            return idHabilidadSelecccionada;
        }




        #endregion

        #endregion
    }
    
}
